/**
 * 用于网络请求简化数据，修建空值数据。
 * 传入非对象：不做任何处理，直接返回
 * 传入对象：去掉symbol、function相关建；去掉值为null、undefined、空字符串、空数组的键。含有循环引用的对象会报错。
 */
export default function prune(obj: unknown) {
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }
  const str = JSON.stringify(obj, function (_, v) {
    if ([null, undefined, ''].includes(v) || (Array.isArray(v) && v.length === 0)) return undefined;

    return v;
  });

  return JSON.parse(str);
}
